package main

import "fmt"

// 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 `finally` 语句块，
// 它一般用于释放某些已分配的资源。
func main() {
	f1()
	a()
	f3()
}

func f1() {
	fmt.Println("In f1 at the top")
	defer f2()
	fmt.Println("In f1 at the bottom!")
}

func f2() {
	fmt.Println("f2: Deferred until the end of the calling function!")
}

func a() {
	i := 0
	defer fmt.Println("a() : ", i)
	i++
	return
}

func f3() {
	for i := 0; i < 3; i++ {
		defer fmt.Printf("i = %d ,", i)
	}
}
